﻿using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using Ext.Net;
using Sio.Mdm.Entities;
using Sio.Mdm.Client;
using Sio.Mdm.BF.Idm;
using Sio.Mdm.BF.Sifranti;
using Sio.Mdm.BF.Administracija;
using Sio.Mdm.BF.Ldap;
using Sio.Mdm.Types.Database;
using Sio.Mdm.Types;
using System.Collections.Generic;

namespace Sio.Mdm.Web.Instalacija
{
	public partial class OrganizacijeSeznam : Controls.Page
	{
		#region Definitions
		public interface OrgRowEditData
		{
			int OrganizacijaId { get; set; }
			string Naziv { get; set; }
			int? TipOrganizacijeId { get; set; }
			int? DavcnaStevilka { get; set; }
			int? ObcinaId { get; set; }
			int? ZdravstveniDomId { get; set; }
			int? KategorijaZavodaId { get; set; }
            bool Aktivno { get; set; }
		}
		#endregion

		#region OnLoad
		protected override void OnLoad(EventArgs e)
		{
			base.OnLoad(e);
			if (!IsPostBack && !X.IsAjaxRequest)
			{
				//občine
				EntityCollection<Obcina> obcine = new EntityCollection<Obcina>(
				new Filter<Obcina>().Where(o => o.ObcinaId != null).OrderBy(o => o.Naziv));
				this.StoreObcine.DataSource = obcine;
				this.StoreObcine.DataBind();
				//tipi organizacij
				EntityCollection<TipOrganizacije> tipiorg = new EntityCollection<TipOrganizacije>(
				new Filter<TipOrganizacije>().Where(o => o.TipOrganizacijeId != null).OrderBy(o => o.Naziv));
				this.StoreTipiOrganizacij.DataSource = tipiorg;
				this.StoreTipiOrganizacij.DataBind();
				//kategorije zavodov
				EntityCollection<KategorijaZavoda> katzav = new EntityCollection<KategorijaZavoda>(
				new Filter<KategorijaZavoda>().Where(o => o.KategorijaZavodaId != null).OrderBy(o => o.Naziv));
				this.StoreKategorijeZavodov.DataSource = katzav;
				this.StoreKategorijeZavodov.DataBind();
				//zdravstveni domovi
				EntityCollection<ZdravstveniDom> zdrdom = new EntityCollection<ZdravstveniDom>(
				new Filter<ZdravstveniDom>().Where(o => o.ZdravstveniDomId != null).OrderBy(o => o.Naziv));
				this.StoreZdravstveniDomovi.DataSource = zdrdom;
				this.StoreZdravstveniDomovi.DataBind();
			}
            NaloziSeznamOrganizacij();
        }
		#endregion

		#region Editing
		protected void UrediPodatke(Object sender, DirectEventArgs e)
		{
			OrgRowEditData EditData = XML.Deserialize<OrgRowEditData>(e.ExtraParams["data"]);
			if (EditData.OrganizacijaId == -99)
			{
				Sio.Mdm.Types.Database.Organizacija ent = EntityFactory.CreateInstance<Sio.Mdm.Types.Database.Organizacija>();
				ent.Naziv = EditData.Naziv;
				ent.TipOrganizacijeId = EditData.TipOrganizacijeId;
                if (ent.TipOrganizacijeId == null)
                    ent.TipOrganizacijeId = 0;

				ent.DavcnaStevilka = EditData.DavcnaStevilka;
				ent.ObcinaId = EditData.ObcinaId;
                if (ent.ObcinaId.Equals(0))
                    ent.ObcinaId = null;

				ent.ZdravstveniDomId = EditData.ZdravstveniDomId;
                if (ent.ZdravstveniDomId.Equals(0))
                    ent.ZdravstveniDomId = null;

				ent.KategorijaZavodaId = EditData.KategorijaZavodaId;
                if (ent.KategorijaZavodaId.Equals(0))
                    ent.KategorijaZavodaId = null;

                try
                {
                    ent.Aktivno = EditData.Aktivno;
                }
                catch
                {
                    ent.Aktivno = true;
                }
				
				ent.Update();
			}
			else
			{
				Sio.Mdm.Types.Database.Organizacija ent = EntityFactory.LoadEntity<Sio.Mdm.Types.Database.Organizacija>
				(new Filter<Sio.Mdm.Types.Database.Organizacija>().Where(r => r.OrganizacijaId == EditData.OrganizacijaId)
				);
				if (ent.EntityState != EntityState.Unknown)
				{
					ent.Naziv = EditData.Naziv;
					ent.TipOrganizacijeId = EditData.TipOrganizacijeId;

					ent.DavcnaStevilka = EditData.DavcnaStevilka;
					ent.ObcinaId = EditData.ObcinaId;
                    if (ent.ObcinaId.Equals(0))
                        ent.ObcinaId = null;

					ent.ZdravstveniDomId = EditData.ZdravstveniDomId;
                    if (ent.ZdravstveniDomId.Equals(0))
                        ent.ZdravstveniDomId = null;

					ent.KategorijaZavodaId = EditData.KategorijaZavodaId;
                    if (ent.KategorijaZavodaId.Equals(0))
                        ent.KategorijaZavodaId = null;

                    ent.Aktivno = EditData.Aktivno;
					ent.Update();
				}
				else
				{
					e.Success = false;
					X.Msg.Alert("Manjkajoči podatki", "Iskani zapis ne obstaja.").Show();
					return;
				}
			}
		}
		protected void OdstraniZapise(object sender, DirectEventArgs e)
		{
			List<int> deletedItems = e.GetIdList<int>("selected", "OrganizacijaId");
			if (deletedItems.Count > 0)
			{
				EntityCollection<Sio.Mdm.Types.Database.Organizacija> col = new EntityCollection<Sio.Mdm.Types.Database.Organizacija>(
					new Filter<Sio.Mdm.Types.Database.Organizacija>().SelectByField(r => r.OrganizacijaId, deletedItems.ToArray())
				);
				col.RemoveAll();
				col.Update();
			}
		}
		#endregion

		#region Private
		private void NaloziSeznamOrganizacij()
		{
			GridOrganizacijeSeznam.LoadData<Sio.Mdm.Types.Database.Organizacija>(
					new Filter<Sio.Mdm.Types.Database.Organizacija>().Where(p => p.OrganizacijaId != null).OrderBy(p => p.Naziv));
		}
		#endregion
	}
}
